package bme.andraskindler.treenventory;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import bme.andraskindler.treenventory.db.TreeStorage;
import bme.andraskindler.treenventory.model.TreeData;

/**
 * Az exportálási funkciókért felelős controller. A REST elérhetősége: http://localhost:8080/TreenventoryWeb/export/
 * 
 * @author andraskindler
 * 
 */
@Controller
@RequestMapping("/export")
public class ExportController {

	private static final String TYPE_XML = "xml";
	private static final String TYPE_CSV = "csv";

	private static final TreeStorage storage = new TreeStorage();

	/**
	 * GET-függvény, mely a bemenő paraméternek megfelelő formátuban exportálja ki az adatbázisban tárolt adatokat.
	 * 
	 * @param type
	 * @return
	 */
	@RequestMapping(value = "{type}", method = RequestMethod.GET)
	public @ResponseBody
	String getTrees(@PathVariable String type) {
		if (type.equalsIgnoreCase(TYPE_XML))
			return mapToXML();
		if (type.equalsIgnoreCase(TYPE_CSV))
			return mapToCSV();

		storage.getAll();

		return "";
	}

	/**
	 * Object-xml mappinget megvalósító segédfüggvény.
	 * 
	 * @return
	 */
	private String mapToXML() {
		String result = "<trees>\n";

		final List<TreeData> data = storage.getAll();
		for (TreeData treeData : data)
			result += treeData.toXML();

		return result + "</trees>";
	}

	/**
	 * Object-csv mappinget megvalósító segédfüggvény.
	 * 
	 * @return
	 */
	private String mapToCSV() {
		String result = TreeData.getCSVAttributes();

		final List<TreeData> data = storage.getAll();
		for (TreeData treeData : data)
			result += treeData.toCSV();

		return result;
	}
}
